package business;

import dados.Funcionario;
import dados.Pessoa;
import dados.Produto;
import dados.Venda;
import exceptions.ClienteJaCadastradoException;
import exceptions.ClienteNaoCadastradoException;
import exceptions.FuncionarioJaCadastradoException;
import exceptions.FuncionarioNaoCadastradoException;
import exceptions.ObjetoInvalidoException;
import exceptions.ProdutoIndisponivelException;
import exceptions.ProdutoJaCadastradoException;
import exceptions.ProdutoNaoCadastradoException;
import exceptions.VendaNaoCadastradaException;

public class Fachada implements InterfaceFachada {

	private CadastroProdutos cadastroProdutos;
	private CadastroPessoas cadastroPessoas;
	private CadastroVendas cadastroVendas;

	public Fachada(int rep) {
		cadastroProdutos = new CadastroProdutos(rep);
		cadastroPessoas = new CadastroPessoas(rep);
		cadastroVendas = new CadastroVendas(rep);
	}

	@Override
	public void inserirProduto(Produto p) throws ClienteJaCadastradoException {
		try {
			cadastroProdutos.inserir(p);
			System.out.println("Produto cadastrado com sucesso");
		} catch (ProdutoJaCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void removerProduto(Produto p) {
		try {
			cadastroProdutos.remover(p);
			System.out.println("Produto removido com sucesso.");
		} catch (ProdutoNaoCadastradoException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public Produto buscarProduto(String cod) {
		Produto p = null;
		try {
			p = (Produto) cadastroProdutos.procurar(cod);
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		}
		return p;
	}

	@Override
	public void atualizarProduto(Produto p) {
		try {
			cadastroProdutos.atualizar(p);
			System.out.println("Produto atualizado.");
		} catch (ProdutoNaoCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (ProdutoIndisponivelException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void inserirPessoa(Pessoa p) {
		try {
			cadastroPessoas.inserir(p);
			if (p instanceof Funcionario) {
				System.out.println("Funcionario cadastrado com sucesso.");
			} else {
				System.out.println("Cliente cadastrado com sucesso.");
			}
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		} catch (ClienteJaCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (FuncionarioJaCadastradoException e) {
			System.out.println(e.getMessage());
		}

	}

	@Override
	public void removerPessoa(Pessoa p) {
		try {
			cadastroPessoas.remover(p);
			if (p instanceof Funcionario) {
				System.out.println("Funcionario removido com sucesso.");
			} else {
				System.out.println("Cliente removido com sucesso.");
			}
		} catch (FuncionarioNaoCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (ClienteNaoCadastradoException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public Pessoa buscarPessoa(String cpf) {
		Pessoa p = null;
		try {
			p = cadastroPessoas.procurar(cpf);
		} catch (ClienteNaoCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (FuncionarioNaoCadastradoException e) {
			System.out.println(e.getMessage());
		}
		return p;
	}

	@Override
	public void atualizarPessoa(Pessoa p) {
		try {
			cadastroPessoas.atualizar(p);
			if (p instanceof Funcionario) {
				System.out.println("Funcionario atualizado com sucesso.");
			} else {
				System.out.println("Cliente atualizado com sucesso.");
			}
		} catch (FuncionarioNaoCadastradoException e) {
			System.out.println(e.getMessage());
		} catch (ClienteNaoCadastradoException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void inserirVenda(Venda f) {
		try {
			cadastroVendas.inserir(f);
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void removerVenda(Venda f) {
		try {
			cadastroVendas.remover(f);
		} catch (VendaNaoCadastradaException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public Venda buscarVenda(int cod) {
		Venda v = null;
		try {
			v = cadastroVendas.procurar(cod);
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		}
		
		return v;
	}

	@Override
	public void atualizarVenda(Venda f) {
		try {
			cadastroVendas.atualizar(f);
		} catch (VendaNaoCadastradaException e) {
			System.out.println(e.getMessage());
		}
	}

}